#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QTcpSocket>
#include<QFile>
#include<QFileDialog>
#include<QHostAddress>
#include<QMessageBox>
#include<QLabel>
#include<QDateTime>
#include<QPainter>
#include<QHostInfo>

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();


private slots:
    void on_pushButton_connect_clicked();

    void on_pushButton_disconnect_clicked();

    void on_pushButton_exit_clicked();

    void on_pushButton_clear_clicked();

    void on_pushButton_sendMsg_clicked();

    void on_pushButton_chooseFile_clicked();

    void on_pushButton_sendFile_clicked();

//自定义槽函数
private slots:
    void connectedFunc();//客户端连接服务器
    void disconnectedFunc();//客户端断开连接服务器
    void socketReadyReadFunc();//客户端读服务区传来的数据

    void startTransferFunc();//传输文件信息
    void updateClientProgressFunc(qint64);//文件传输及显示进度条更新
    void displayErrorFunc(QAbstractSocket::SocketError);//异常处理

private:
    Ui::Dialog *ui;

private:
    QTcpSocket *tcp_textSocket;
    QTcpSocket *tcp_fileSocket;

    QFile *localFile;//要传输的文件
    qint64 totalBytes;//数据总大小
    qint64 bytesWrites;//已经发送出去的数据大小
    qint64 bytesToWrites;//剩下的要发送出去的数据大小
    qint64 loadSizes;//每一次发送出去数据的大小
    QString fileNames;//保存文件
    QByteArray buff;//数据缓冲区，存放每次要发送的数据

    //更改窗口背景
    void paintEvent(QPaintEvent *event);
    //获取本机ip
    QString getLocalIPAddress();
    //关闭事件
    void closeEvent(QCloseEvent *);
};
#endif // DIALOG_H
